//Flyweight.h
#ifndef __FLYWEIGHT_H__
#define __FLYWEIGHT_H__
#include <string>

class Flyweight
{
public:
    virtual ~Flyweight();

    virtual void Operation(const std::string& extrinsicState);
    std::string GetIntrinsicState();
protected:
    Flyweight(std::string intrinsicState);
private:
    std::string _intrinsicState;
};

class ConcreteFlyweight:public Flyweight
{
public:
    ConcreteFlyweight(std::string intrinsicState);
    ~ConcreteFlyweight();

    void Operation(const std::string& extrinsicState);
protected:
private:
};

#endif //~__FLYWEIGHT_H__

